iT邦幫忙

2022 iThome 鐵人賽

DAY 5
0

下圖頁面有3個按鈕, 本篇文章會示範 使用5種不同的方法來添加按鈕點擊事件。

方法1、使用Java 8的方法引用(Method Reference)::

@Override
   protected void onCreate(Bundle savedInstanceState) {
       ...
       binding.btn1.setOnClickListener(this::method1);
       binding.btn2.setOnClickListener(this::method2);
       binding.btn3.setOnClickListener(this::method3);
   }

   private void method3(View view) {
       // TODO
   }

   private void method2(View view) {
       // TODO
   }

   private void method1(View view) {
       // TODO
   }

方法2、在布局文件中為按鈕設置點擊事件

使用此方法必須把點擊後 要觸發的方法設為 "public"

public class MainActivity extends AppCompatActivity {
    ...

    public void method3(View view) {
        // TODO
    }

    public void method2(View view) {
        // TODO
    }

    public void method1(View view) {
        // TODO
    }
}

然後在佈局上的按鈕, 添加android:onClick屬性
在輸入的時候就會顯示上面寫的點擊事件方法

方法3、實作點擊事件在setOnClickListener方法內

還可以細分為內部New、Lambda、外部New後再添加

// 3-1 內部new
binding.btn1.setOnClickListener(new View.OnClickListener() {
    @Override
    public void onClick(View v) {
        // TODO
    }
});

// 3-2 lambda
binding.btn2.setOnClickListener(view -> {
    // TODO
});

// 3-3 外部new後再添加
View.OnClickListener add = new View.OnClickListener() {
    @Override
    public void onClick(View v) {
        // TODO
    }
};
binding.btn3.setOnClickListener(add);

方法4、主類中實現OnClickListener接口

主類(this) implemnts View.OnClickListener

public class MainActivity extends AppCompatActivity implements View.OnClickListener {
    ...
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        ...
        binding.btn1.setOnClickListener(this);
        binding.btn2.setOnClickListener(this);
        binding.btn3.setOnClickListener(this);
    }

    @Override
    public void onClick(View v) {
        switch (v.getId()) {
            case R.id.btn_1:
                // TODO method1
                break;
            case R.id.btn_2:
                // TODO method2
                break;
            case R.id.btn_3:
                // TODO method3
                break;
            default: break;
        }
    }
}

方法5、創建內部類

public class MainActivity extends AppCompatActivity {
    ...
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        ...
        MyOnClickListener myOnClickListener = new MyOnClickListener();
        binding.btn1.setOnClickListener(myOnClickListener);
        binding.btn2.setOnClickListener(myOnClickListener);
        binding.btn3.setOnClickListener(myOnClickListener);
    }

    // 創建內部類實現onClickListener接口
    private static class  MyOnClickListener implements View.OnClickListener {
        
        @Override
        public void onClick(View v) {
            switch (v.getId()) {
                case R.id.btn_1:
                    // TODO method 1
                    break;
                case R.id.btn_2:
                    // TODO method 2
                    break;
                case R.id.btn_3:
                    // TODO method 3
                    break;
                default: break;
            }
        }
    }
}


上一篇
Day04 - ViewBinding
下一篇
Day06 - Android Fragment
系列文
Android 開發 30天 初學之路筆記30
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言